#ifndef SOBJC_PROTOCOL_H
#define SOBJC_PROTOCOL_H

#include <sobjc/runtime.h>

OBJC_EXPORT void objc_init_Protocol_class();
OBJC_EXPORT Protocol *objc_make_protocol(const char *, ProtocolList);

OBJC_EXPORT const char *objc_protocol_get_name(Protocol *);
OBJC_EXPORT ProtocolList objc_protocol_get_protocol_list(Protocol *);
OBJC_EXPORT MethodDescriptionList objc_protocol_get_method_description_list(Protocol *, BOOL, BOOL);
OBJC_EXPORT MethodDescription objc_protocol_get_method_description(Protocol *, SEL, BOOL, BOOL);
OBJC_EXPORT void objc_protocol_add_instance_method(Protocol *, const char *, const char *);
OBJC_EXPORT void objc_protocol_add_optional_instance_method(Protocol *, const char *, const char *);
OBJC_EXPORT void objc_protocol_add_class_method(Protocol *, const char *, const char *);
OBJC_EXPORT void objc_protocol_add_optional_class_method(Protocol *, const char *, const char *);
OBJC_EXPORT BOOL objc_protocol_conforms_to(Protocol *, Protocol *);

OBJC_EXPORT MethodDescription objc_make_method_description(const char *, const char *);
OBJC_EXPORT SEL objc_method_description_get_name(MethodDescription);
OBJC_EXPORT BOOL objc_method_description_is_required(MethodDescription);
OBJC_EXPORT BOOL objc_method_description_is_inst_method(MethodDescription);

#endif /* SOBJC_PROTOCOL_H */

